/**
 * 此ajax中做了拦截请求错误的统一提示，以及session过期的统一处理
 * 支持seajs方式引用和直接src引用，依赖于 jquery.js、layer.js，调用方式跟jquery的$.ajax()一样
 * 调用方式一（src方式）：
 * Ajax.ajax({
 *     url:"xx/xx.do"
 *    ,data:JSON.stringify(data)
 *    ,success:function(data){
 *        if(data.result == "true"){
 *            console.log(data);
 *        }
 *    }
 * });
 *
 * 调用方式二(用seajs加载)：
 * var Ajax = require("ajax");
 * 然后就参见方法一...
 */
define(function(require,exports,module){
    require("commonStaticDirectory/plugins/jquery.loading");

    var Ajax = {
        /**
         * 基础工具---组合URL参数
         * @param params
         * @returns {string}
         */
        getParamsStr: function (params) {
            var paramStr = "";
            if (params) {
                for (var k in params) {
                    if (k && params[k] != null) {
                        var sParaVal = "";
                        if(typeof params[k] == "string" || typeof params[k] == "number"){
                            sParaVal = params[k];
                        }else if(typeof params[k] == "object"){
                            sParaVal = JSON.stringify(params[k]);
                        }
                        paramStr += '&' + k + '=' + sParaVal;
                    }
                }
            }
            if(paramStr){
                paramStr = "?"+paramStr.substring(1);
            }
            return paramStr;
        },
        //基础ajax提交
        ajax:function(option){
            var t = this;
            //请求数据防xss攻击处理
            if(option.data){
                var newData = "";
                var sType = typeof option.data;
                if(sType === "string"){
                    newData = option.data;
                }else{
                    newData = JSON.stringify(option.data);
                }
                newData = newData.replace(/<script/igm,"&lt;script").replace(/<\/script>/igm,"&lt;script&gt;");
                if(sType === "string"){
                    option.data = newData;
                }else{
                    option.data = JSON.parse(newData);
                }
            }
            //默认参数
            var data={
                type: "post",
                dataType: "json",
                contentType: "application/json;charset=UTF-8",
                error:function(XMLHttpRequest, textStatus, errorThrown){
                    if(XMLHttpRequest.readyState == 4){
                        layer.msg("请求出错，请重试", {offset: 0,shift:6}); //给个错误提示
                    }
                }
            }
            $.extend(data,option);
            //重写success，如果传回的data.result值为true,才产生回调，供模块使用
            data.success = function(obj){
                //返回数据防xss攻击处理
                if(obj){
                    var newData = "";
                    var sType = typeof obj;
                    if(sType === "string"){
                        newData = obj;
                    }else{
                        newData = JSON.stringify(obj);
                    }
                    newData = newData.replace(/<script/igm,"&lt;script").replace(/<\/script>/igm,"&lt;script&gt;");
                    if(sType === "string"){
                        obj = newData;
                    }else{
                        obj = JSON.parse(newData);
                    }
                }
                if(data.dataType == "html"){obj = JSON.parse(obj);}
                //这里的status不为1000表示不在顶部做提示的抛错特殊情况
                if(obj.result == "false" && obj.statusCode != "1000"){
                    layer.msg(obj.resultDesc, {offset: 0,shift:6}); //给个错误提示
                    //如果登陆会话已过期，就弹出登陆框
                    if(obj.statusCode && obj.statusCode == "50"){
                        t.showLoginBox();
                    }
                }
                typeof option.success == "function" && option.success(obj);
            }
            return $.ajax(data);
        },
         /**
          * 弹出登陆框
          * */
         showLoginBox:function(){
            var _sHtml = '' +
                '<form id="session_out_login_box" class="clearfix">' +
                '   <div class="form_group clearfix">' +
                '       <label for="userName">账号：</label>' +
                '       <div class="form_group_right"><input type="text" name="userName" class="session_out_login_text"/></div>' +
                '   </div>' +
                '   <div class="form_group clearfix">' +
                '       <label for="password">密码：</label>' +
                '       <div class="form_group_right"><input type="password" name="password" class="session_out_login_text"/></div>' +
                '   </div>' +
                '   <div class="form_group form_group_submit clearfix">' +
                '       <label></label>' +
                '       <div class="form_group_right"><input type="button" class="session_out_login_submit" value="登  陆"/> <a href="###">忘记密码</a></div>' +
                '       <div class="session_out_login_loading"><img width="14" height="14" src="'+gMain.basePath+'static/images/common/loading.gif" alt=""/></div>' +
                '   </div>' +
                '</form>';
             //弹窗登陆窗口，由于现在这一版的后台的登陆接口还没来得及调整，这里先做成跳转到登陆页面的处理
             setTimeout(function(){
                 window.location.href = gMain.basePath+ "views/common/logout.jsp";
             },2000);
         },
        /**
         * api接口统一管理处
         * */
        ApiTools:function(){
            var t = this;
            return {
                
                /**
                 * 最后一个属性分割线---无实际意义----------------------------------------
                 * */
                lastPrototype:undefined
            };
        },
        /**
         * 最后一个属性分割线---无实际意义----------------------------------------
         * */
         lastPrototype:undefined
     };

    module.exports = Ajax;
});
